package file.it.byte_stream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

/**
 * 目标：掌握使用FileInputStream每次读取多个字节
 */
public class FileInputStreamTest2 {
    public static void main(String[] args) throws Exception {
        // public int read(byte[] buffer) 每次用一个字节数组去读取数据，返回字节数组读取了多少字节，如果发现没有数据可读会返回-1

        // 1.创建一个字节输入流对象代表字节输入流管道与源文件接通
        InputStream is = new FileInputStream(("src/abc02.txt"));

        // 2.开始读取文件中的字节数据：每次读取多个字节
        // public int read(byte b[]) throws IOException
        // 每次读取多个字节到字节数组中去，返回读取的字节数量，读取完毕后会返回-1
//        byte[] buffer = new byte[3];
//        int len = is.read(buffer);
//        String rs = new String(buffer);
//        System.out.println(rs);
//        System.out.println("当前读取的字节数量：" + len);

        // buffer = [abc]
        // buffer = [66c]
//        int len2 = is.read(buffer);
//        // 注意：读取多少，倒出多少
//        String rs2 = new String(buffer,0,len2);
//        System.out.println(rs2);
//        System.out.println("当前读取的字节数量：" + len2);
//
//        int len3 = is.read();
//        System.out.println(len3);  //-1

        // 3.使用循环改造
        byte[] buffer = new byte[3];
        int len; // 记住每次读取了多少字节
        while ((len = is.read(buffer)) != -1) {
            // 注意：读取多少，倒出多少
            String rs = new String(buffer, 0, len);
            System.out.println(rs);
        }
        // 性能得到了明显的提升
        // 这种方案也不能避免读取汉字输出乱码的问题！！
        is.close(); // 关闭流
    }
}
